package com.enjoyor.soa.traffic.api.service.dubbo.bigdata;

import com.enjoyor.soa.traffic.util.pojo.Page;
import com.enjoyor.soa.traffic.util.pojo.ResultPojo;

import java.util.Date;

/**
 * 基础信息服务
 */
public interface DubboBaseInfoService {

	/**
	 * 对过车记录进行查询并获取结果
	 * PS 为了提高查询速度，建议尽可能输入车牌； 时间范围不确定时传null,比传具体时间范围性能更好
	 *
	 * @param id          过车信息ID String  可以为null
	 * @param licenseNum  号牌号码 String  可以为null，支持模糊查询
	 * @param licenseType 号牌类型  String 可为null
	 * @param startDay    分析起始日期  String 可为null
	 * @param endDay      分析截止日期 String  可为null
	 * @param pointId     分析截止日期  String[] 可以为null
	 * @param minSpeed    速度范围下限  Integer 可以为null
	 * @param maxSpeed    速度范围上限  Integer 可以为null
	 * @return 包含过车信息的List (默认上限1000条数据) List<PassInfoPojo>
	 */
	public ResultPojo getVehSear(String id, String licenseType, String licenseNum, String startDay, String endDay, String[] pointId, Integer minSpeed, Integer maxSpeed);

	/***
	 *通勤指数
	 * @param token
	 * @param licenseType
	 * @param licenseNum
	 * @return
	 */
	public  ResultPojo  getCommuterIndex(String token,String licenseType,String licenseNum);
	/**
	 * 查询车辆标签信息
	 * 精确查找，参数不为空
	 *
	 * @param licenseType
	 * @param licenseNum
	 * @param labelType
	 * @return
	 */
	public ResultPojo getVehicleLabelValue(String licenseType, String licenseNum, String labelType);

	/**
	 * 通过号牌类型和号牌号码获取机动车信息
	 *
	 * @param licenseType 号牌类型
	 * @param licenseNum 号牌号码
	 * @return VehicleInfoDto ：机动车信息
	 */
	public ResultPojo getVehicleInfo(String token, String licenseType, String licenseNum);

	/**
	 * 获取某辆车在指定时间点的卡口过车信息
	 * @param licenseType 号牌类型
	 * @param licenseNum 号牌号码
	 * @param passTime 过车时间
	 * @return PassInfoDto ：卡口过车信息
	 */
	public ResultPojo getPassInfo(String token, String licenseType, String licenseNum, Date passTime);

	/**
	 * 获取某辆车在指定时间范围内的卡口过车信息
	 * @param licenseType 号牌类型
	 * @param licenseNum 号牌号码
	 * @param startTime 过车起始时间
	 * @param endTime 过车截止时间
	 * @return List &lt; PassInfoDto &gt; ：包含卡口过车信息的List集合
	 */
	public ResultPojo getPeriodPassInfo(String token, String licenseType, String licenseNum, Date startTime, Date endTime);


	/**
	 * @param trackId：车辆轨迹编码
	 * @param trackType：车辆轨迹类型（0：无断点轨迹，1：有断点轨迹）
	 * @return List &lt; PointTrackDto &gt; ：包含卡口过车信息的List集合
	 */
	public ResultPojo getTrackInfo(String token, String trackId, String trackType);

	/**
	 * 根据点位id获取点位名称和坐标
	 * @param pointId
	 * @return PointsDto
	 */
	public ResultPojo getPointInfo(String token, String pointId);

	/**
	 * 根据点位name模糊查询 点位名称
	 * @param pointName 模糊查询，为空查询所有
	 * @return List &lt; PointsDto &gt; ，仅 id和name
	 */
	public ResultPojo getPointList(String token, String pointName);


	/**
	 * 根据点位name模糊查询 点位名称
	 * @param pointName 模糊查询，为空查询所有
	 * @return Page < List &lt; PointsDto &gt; >  ，仅 id和name
	 */
	public ResultPojo getPointPage(String token, String pointName, Page page);


	/**
	 * 查询路段
	 * @param roadId 路段名称模糊查询
	 * @return Page < List<Map> >
	 */
	public ResultPojo getBaseRoad(String token, String roadName, Page page);

	/**
	 * 查询区域
	 * @param areaName 区域名称模糊查询
	 * @return Page < List<Map> >
	 */
	public ResultPojo getBaseArea(String token, String areaName, Page page);
}
